/*************************************************************************
	> File Name: oj-82_cut_trees.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2020年11月01日 星期日 18时49分59秒
 ************************************************************************/

#include <iostream>
using namespace std;

int n, m, num[1000005], tr;

long long func(int h) {
    long long s = 0;
    for (int i = 0; i < n; ++i) {
        //树高高于h的时候才砍树
        if (h < num[i]) {
            //砍下的树加入总和
            s += num[i] - h;
        }
    }
    return s;
}

int bin_search() {
    int l = 0, r = tr;
    while (l != r) {
        int mid = ((long long)l + r + 1) / 2;
        long long s = func(mid);
        //当以mid高度去砍所有的树时，可以得到总共s的木料
        //如果s木料不少于需求的木料，下界可以提高
        if (s >= m) {
            l = mid;
        }
        //如果s木料少于需求的木料，上界需要减小
        else {
            r = mid - 1;
        }
    }
    //返回设定的高度，在这个高度下，可以获得的木材至少为m
    return r;
}

int main() {
    cin >> n >> m;
    for (int i = 0; i < n; ++i) {
        cin >> num[i];
        //记录下最高的树的长度
        tr = max(tr, num[i]);
    }
    cout << bin_search() << endl;
    return 0;
}
